home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / GoldED / Add-Ons / envRCS09 / rcs / arexx / view.ged < prev    next >
Text File  |  1999-07-06  |  17KB  |  693 lines

  1. /* $VER: 1.0, ©1997 Dietmar Eilert. Check out and view file. */
  2.  
  3. OPTIONS RESULTS                             /* enable return codes     */
  4.  
  5. arg MODE
  6.  
  7. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then    /* not started by Golden ? */
  8.     address 'GOLDED.1'
  9.  
  10. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  11.  
  12. if (RC ~= 0) then
  13.     exit
  14.  
  15. OPTIONS FAILAT 6                            /* ignore warnings         */
  16.  
  17. SIGNAL ON SYNTAX                            /* ensure clean exit       */
  18.  
  19. /* ------------------------ INSERT YOUR CODE HERE: ------------------- */
  20.  
  21. call rcs_login
  22.  
  23. call rcs_readcfg
  24.  
  25. if (CONFIG.CFG_FILES = 0) then
  26.  
  27.     'REQUEST PROBLEM="Current project is empty"'
  28.  
  29. else do
  30.  
  31.     FILELIST = ""
  32.  
  33.     do FILE = 1 to CONFIG.CFG_FILES
  34.  
  35.         PATH = CONFIG.CFG_PATH || "rcs/" || CONFIG.CFG_SETUP.FILE
  36.  
  37.         if (exists(PATH) = 0) then
  38.  
  39.             'REQUEST PROBLEM="File *"rcs/' || CONFIG.CFG_SETUP.FILE || '*" missing."'
  40.         else
  41.             FILELIST = FILELIST || '"' || CONFIG.CFG_SETUP.FILE || '" '
  42.     end
  43.  
  44.     if (FILELIST ~= "") then do
  45.  
  46.         'REQLIST SORT VAR=SELECTION ENTRY ' || FILELIST
  47.  
  48.         if (RC = 0) then do
  49.  
  50.             USER = CONFIG.CFG_LOGIN
  51.  
  52.             PATH = CONFIG.CFG_PATH
  53.  
  54.             if (USER = 0) then
  55.                 WORK = PATH
  56.             else
  57.                 WORK = CONFIG.CFG_WORK.USER
  58.  
  59.             'EXPAND NAME="' || PATH || '" VAR=PATH'
  60.             'EXPAND NAME="' || WORK || '" VAR=WORK'
  61.  
  62.             PATH = PATH || SELECTION
  63.             WORK = WORK || SELECTION
  64.  
  65.             if (exists(WORK)) then do
  66.  
  67.                 'REQUEST BODY="File already checked out." BUTTON="!USE|_Overwrite|_Cancel"'
  68.  
  69.                 if ((RC ~= 0) | (RESULT = 0)) then
  70.  
  71.                     call rcs_exit
  72.  
  73.                 if (RESULT = 1) then do
  74.  
  75.                     'OPEN NEW SMART "' || WORK || '"'
  76.  
  77.                     call rcs_exit
  78.                 end
  79.  
  80.                 'FILE DELETE FORCE NAME="' || WORK || '"'
  81.             end
  82.  
  83.             /* check out file */
  84.  
  85.             if (MODE = "REVISION") then do
  86.  
  87.                 do forever
  88.  
  89.                     'REQUEST STRING BODY="Please specify revision (x.y) to be checked out:" VAR=REVISION'
  90.  
  91.                     if (RC ~= 0) then
  92.  
  93.                         call rcs_exit
  94.  
  95.                     if ((index(SYMBOLIC, "*") ~= 0) | (index(SYMBOLIC, '"') ~= 0)) then
  96.  
  97.                         'REQUEST PROBLEM="Identifier contains invalid character"'
  98.                     else
  99.                         leave
  100.                 end
  101.  
  102.                 /* RCS doesn't allow spaces (code 32) in identifiers; we use code 160 instead (unbeakable space) */
  103.  
  104.                 if (length(REVISION) ~= 0) then do
  105.  
  106.                     do N = 1 to length(REVISION)
  107.  
  108.                         if (substr(REVISION, N, 1) = " ") then
  109.  
  110.                             REVISION = overlay(D2C(160), REVISION, N, 1)
  111.                     end
  112.                 end
  113.             end
  114.             else
  115.                 REVISION = ""
  116.  
  117.             if (REVISION = "") then
  118.                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:co *"' || PATH || '*""'
  119.             else
  120.                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:co *"-r' || REVISION || '*" *"' || PATH || '*""'
  121.  
  122.             /* successful ? */
  123.  
  124.             if (exists(PATH) ~= 0) then do
  125.  
  126.                 /* copy file to working directory */
  127.  
  128.                 if (WORK ~= PATH) then do
  129.  
  130.                     shell
  131.  
  132.                     'copy "' || PATH || '" "' || WORK || '"'
  133.  
  134.                     shell
  135.  
  136.                     if (exists(WORK) = 0) then do
  137.  
  138.                         'REQUEST PROBLEM="Failed to copy file to your working directory."'
  139.  
  140.                         WORK = PATH
  141.                     end
  142.                     else
  143.                         'FILE DELETE FORCE NAME="' || PATH || '"'
  144.                 end
  145.  
  146.                 'OPEN NEW SMART "' || WORK || '"'
  147.             end
  148.             else do
  149.  
  150.                 'REQUEST BODY="RCS failed to lock this*nfile. Possible cause:*naccess conflict." BUTTON="!OK|_Verbose|_Cancel"'
  151.  
  152.                 if ((RC = 0) & (RESULT = 2)) then do
  153.  
  154.                     /* try again (with output) */
  155.  
  156.                     if (REVISION = "") then
  157.                         'RUN DIR="' || CONFIG.CFG_PATH || '" CMD="rcs:co *"' || PATH || '*""'
  158.                     else
  159.                         'RUN DIR="' || CONFIG.CFG_PATH || '" CMD="rcs:co *"-r' || REVISION || '*" *"' || PATH || '*""'
  160.                 end
  161.             end
  162.         end
  163.     end
  164.     else
  165.         'REQUEST PROBLEM="All files already checked out."'
  166. end
  167.  
  168. /* ---------------------------- END OF YOUR CODE --------------------- */
  169.  
  170. 'UNLOCK' /* VERY important: unlock GUI */
  171.  
  172. exit
  173.  
  174. SYNTAX:
  175.  
  176. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  177.  
  178. 'UNLOCK'
  179.  
  180. exit
  181.  
  182. /* /// "rcs_login" */
  183.  
  184. rcs_login: procedure expose CONFIG.
  185.  
  186.     if ((exists("rcs:ci") = 0) | (exists("rcs:co") = 0) | (exists("rcs:rcs") = 0) | (exists("rcs:setuprcs") = 0)) then do
  187.  
  188.         'REQUEST PROBLEM="File(s) missing - Please install and|configure HWRCS before you continue"'
  189.  
  190.         call rcs_exit
  191.     end
  192.  
  193.     'QUERY $LOGNAME VAR=LOGNAME'
  194.  
  195.     if (INDEX(LOGNAME, " ") ~= 0) then do
  196.  
  197.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  198.  
  199.         LOGNAME = ""
  200.     end
  201.  
  202.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  203.  
  204.         if (VERBOSE = "TRUE") then
  205.             'REQUEST PROBLEM="Please log in before you proceed.*nIt is required that every member of your*nworkgroup logs in under a unique name.*nLogin names will be used to keep track of*nthe files used and modified by various*nmembers of your workgroup.*n" BUTTON="!OK"'
  206.         else
  207.             'REQUEST PROBLEM="Please log in before you proceed."'
  208.  
  209.         call rcs_quicklogin
  210.     end
  211.  
  212.     return
  213.  
  214. /* /// */
  215. /* /// "rcs_quicklogin" */
  216.  
  217. rcs_quicklogin: procedure expose CONFIG.
  218.  
  219.     'QUERY $LOGNAME VAR=LOGNAME'
  220.  
  221.     if (INDEX(LOGNAME, " ") ~= 0) then do
  222.  
  223.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  224.  
  225.         LOGNAME = ""
  226.     end
  227.  
  228.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  229.  
  230.         do while ((LOGNAME = "") | (LOGNAME = "0"))
  231.  
  232.             'REQUEST STRING TITLE="Login" VAR=LOGNAME'
  233.  
  234.             if (RC ~= 0) then do
  235.  
  236.                 'UNLOCK'
  237.  
  238.                 exit
  239.             end
  240.  
  241.             if (INDEX(LOGNAME, " ") ~= 0) then do
  242.  
  243.                 'REQUEST PROBLEM="Login name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  244.  
  245.                 LOGNAME = ""
  246.             end
  247.             else if ((LOGNAME = "") | (LOGNAME = "0")) then
  248.  
  249.                 'REQUEST PROBLEM="Anonymous login not supported"'
  250.  
  251.             else do
  252.  
  253.                 'SET $LOGNAME "' || LOGNAME || '"'
  254.  
  255.                 'REQUEST STATUS="Logged in as ' || LOGNAME || '."'
  256.  
  257.                 break
  258.             end
  259.         end
  260.     end
  261.  
  262.     return
  263.  
  264. /* /// */
  265. /* /// "rcs_readcfg" */
  266.  
  267. rcs_readcfg: procedure expose CONFIG.
  268.  
  269.     'QUERY PATH VAR=PATH'
  270.  
  271.     /* find configuration file */
  272.  
  273.     if (exists(PATH || "RCS_config") = 0) then do
  274.  
  275.         if (exists(PATH || "RCS_root") = 0) then do
  276.  
  277.             PATH = pragma('D')
  278.  
  279.             'EXPAND NAME="' || PATH || '" VAR=PATH'
  280.  
  281.             if (exists(PATH || "RCS_config") = 0) then do
  282.  
  283.                 if (exists(PATH || "RCS_root") = 0) then do
  284.  
  285.                     'REQUEST STATUS="No project in current path !"'
  286.  
  287.                     'REQUEST DIR TITLE="Select project directory:" VAR=PATH'
  288.  
  289.                     if (RC ~= 0) then
  290.  
  291.                         call rcs_exit
  292.  
  293.                     'REQUEST STATUS=""'
  294.                 end
  295.             end
  296.         end
  297.     end
  298.  
  299.     'EXPAND NAME="' || PATH || '" VAR=PATH'
  300.  
  301.     if (exists(PATH || "RCS_root") ~= 0) then do
  302.  
  303.         call rcs_readlink PATH
  304.  
  305.         'EXPAND NAME="' || RESULT || '" VAR=PATH'
  306.     end
  307.  
  308.     if (exists(PATH || "RCS_config") = 0) then do
  309.  
  310.         'REQUEST PROBLEM="No projects in seleted path."'
  311.  
  312.         call rcs_exit
  313.     end
  314.     else do
  315.  
  316.         /* read project configuration */
  317.  
  318.         R = open('CONFIG', PATH || "RCS_config", 'READ')
  319.  
  320.         if (R = 0) then do
  321.  
  322.             'REQUEST PROBLEM="Couldn''t read configuration file"'
  323.  
  324.             call rcs_exit
  325.         end
  326.         else do
  327.  
  328.             CONFIG.CFG_CONFIG   = PATH || "RCS_config"
  329.             CONFIG.CFG_NAME     = ""
  330.             CONFIG.CFG_PATH     = ""
  331.             CONFIG.CFG_COMMENT  = ""
  332.             CONFIG.CFG_SNAPSHOT = ""
  333.             CONFIG.CFG_USERS    = 0
  334.             CONFIG.CFG_LOGIN    = 0
  335.             CONFIG.CFG_FILES    = 0
  336.  
  337.             do forever
  338.  
  339.                 DATA = readln('CONFIG')
  340.  
  341.                 if (eof('CONFIG')) then do
  342.  
  343.                     R = close('CONFIG')
  344.  
  345.                     leave
  346.                 end
  347.                 else do
  348.  
  349.                     if (left(DATA, 6) = "[NAME]") then
  350.  
  351.                         CONFIG.CFG_NAME = readln('CONFIG')
  352.  
  353.                     else if (left(DATA, 6) = "[PATH]") then
  354.  
  355.                         CONFIG.CFG_PATH = readln('CONFIG')
  356.  
  357.                     else if (left(DATA, 10) = "[SNAPSHOT]") then do
  358.  
  359.                         CONFIG.CFG_SNAPSHOT = readln('CONFIG')
  360.                     end
  361.                     else if (left(DATA, 9) = "[COMMENT]") then do
  362.  
  363.                         CONFIG.CFG_COMMENT = readln('CONFIG')
  364.                     end
  365.  
  366.                     else if (left(DATA, 6) = "[USER]") then do
  367.  
  368.                         USERS = 0
  369.  
  370.                         do forever
  371.  
  372.                             DATA = readln('CONFIG')
  373.  
  374.                             if (eof('CONFIG')) then
  375.  
  376.                                 leave
  377.  
  378.                             if (length(compress(DATA, " ;")) = 0) then
  379.  
  380.                                 leave
  381.  
  382.                             else do
  383.  
  384.                                 USERS = USERS + 1
  385.  
  386.                                 CONFIG.CFG_USER.USERS = DATA
  387.                                 CONFIG.CFG_WORK.USERS = CONFIG.CFG_PATH
  388.                             end
  389.                         end
  390.  
  391.                         CONFIG.CFG_USERS = USERS
  392.  
  393.                     end
  394.                     else if (left(DATA, 6) = "[WORK]") then do
  395.  
  396.                         USERS = 0
  397.  
  398.                         do forever
  399.  
  400.                             DATA = readln('CONFIG')
  401.  
  402.                             if (eof('CONFIG')) then
  403.  
  404.                                 leave
  405.  
  406.                             if (length(compress(DATA, " ;")) = 0) then
  407.  
  408.                                 leave
  409.  
  410.                             else do
  411.  
  412.                                 USERS = USERS + 1
  413.  
  414.                                 CONFIG.CFG_WORK.USERS = DATA
  415.                             end
  416.                         end
  417.                     end
  418.                     else if (left(DATA, 7) = "[FILES]") then do
  419.  
  420.                         FILES = 0
  421.  
  422.                         do forever
  423.  
  424.                             DATA = readln('CONFIG')
  425.  
  426.                             if (eof('CONFIG')) then
  427.  
  428.                                 leave
  429.  
  430.                             if (length(compress(DATA, " ;")) = 0) then
  431.  
  432.                                 leave
  433.  
  434.                             else do
  435.  
  436.                                 FILES = FILES + 1
  437.  
  438.                                 CONFIG.CFG_SETUP.FILES = DATA
  439.                             end
  440.                         end
  441.  
  442.                         CONFIG.CFG_FILES = FILES
  443.                     end
  444.                 end
  445.             end
  446.  
  447.             /* check user ID */
  448.  
  449.             'QUERY $LOGNAME VAR=LOGNAME'
  450.  
  451.             if (CONFIG.CFG_USERS ~= 0) then do
  452.  
  453.                 do USER = 1 to CONFIG.CFG_USERS
  454.  
  455.                     if (CONFIG.CFG_USER.USER = LOGNAME) then do
  456.  
  457.                         CONFIG.CFG_LOGIN = USER
  458.  
  459.                         leave
  460.                     end
  461.                 end
  462.  
  463.             end
  464.  
  465.             /* new user ? */
  466.  
  467.             if (CONFIG.CFG_LOGIN = 0) then do
  468.  
  469.                 'REQUEST BODY="You have not been working on this*nproject so far. Would you like to*nbe added as new user ?" BUTTON="!ADD|_Cancel"'
  470.  
  471.                 if ((RC ~= 0) | (RESULT = 0)) then
  472.  
  473.                     call rcs_exit
  474.  
  475.                 else do
  476.  
  477.                     USER = CONFIG.CFG_USERS + 1
  478.  
  479.                     CONFIG.CFG_USERS     = USER
  480.                     CONFIG.CFG_LOGIN     = USER
  481.                     CONFIG.CFG_USER.USER = LOGNAME
  482.                     CONFIG.CFG_WORK.USER = ""
  483.  
  484.                     call rcs_createworkdir USER
  485.  
  486.                     call rcs_savecfg
  487.                 end
  488.             end
  489.         end
  490.     end
  491.  
  492.     return
  493.  
  494. /* /// */
  495. /* /// "rcs_savecfg" */
  496.  
  497. rcs_savecfg: procedure expose CONFIG.
  498.  
  499.     R = open('CONFIG', CONFIG.CFG_CONFIG, 'WRITE')
  500.  
  501.     if (R = 0) then
  502.  
  503.         'REQUEST PROBLEM="Couldn''t save configuration file"'
  504.  
  505.     else do
  506.  
  507.         'QUERY DATE VAR=DATE'
  508.  
  509.         R = writeln('CONFIG', "[NAME]")
  510.         R = writeln('CONFIG', CONFIG.CFG_NAME)
  511.         R = writeln('CONFIG', "")
  512.  
  513.         R = writeln('CONFIG', "[PATH]")
  514.         R = writeln('CONFIG', CONFIG.CFG_PATH)
  515.         R = writeln('CONFIG', "")
  516.  
  517.         R = writeln('CONFIG', "[SNAPSHOT]")
  518.         R = writeln('CONFIG', CONFIG.CFG_SNAPSHOT)
  519.  
  520.         if (CONFIG.CFG_SNAPSHOT ~= "") then
  521.  
  522.             R = writeln('CONFIG', "")
  523.  
  524.         R = writeln('CONFIG', "[COMMENT]")
  525.         R = writeln('CONFIG', CONFIG.CFG_COMMENT)
  526.  
  527.         if (CONFIG.CFG_COMMENT ~= "") then
  528.  
  529.             R = writeln('CONFIG', "")
  530.  
  531.         R = writeln('CONFIG', "[USER]")
  532.  
  533.         if (CONFIG.CFG_USERS ~= 0) then do
  534.  
  535.             do USER = 1 to CONFIG.CFG_USERS
  536.  
  537.                 R = writeln('CONFIG', CONFIG.CFG_USER.USER)
  538.  
  539.             end
  540.         end
  541.  
  542.         R = writeln('CONFIG', "")
  543.  
  544.         R = writeln('CONFIG', "[WORK]")
  545.  
  546.         if (CONFIG.CFG_USERS ~= 0) then do
  547.  
  548.             do USER = 1 to CONFIG.CFG_USERS
  549.  
  550.                 R = writeln('CONFIG', CONFIG.CFG_WORK.USER)
  551.  
  552.             end
  553.         end
  554.  
  555.         R = writeln('CONFIG', "")
  556.  
  557.         R = writeln('CONFIG', "[FILES]")
  558.  
  559.         if (CONFIG.CFG_FILES ~= 0) then do
  560.  
  561.             do FILE = 1 to CONFIG.CFG_FILES
  562.  
  563.                 R = writeln('CONFIG', CONFIG.CFG_SETUP.FILE)
  564.  
  565.             end
  566.         end
  567.  
  568.         R = close('CONFIG')
  569.     end
  570.  
  571.     return
  572.  
  573. /* /// */
  574. /* /// "rcs_exit" */
  575.  
  576. rcs_exit:
  577.  
  578.     'UNLOCK'
  579.  
  580.     exit
  581.  
  582.     return
  583.  
  584. /* /// */
  585. /* /// "rcs_createworkdir" */
  586.  
  587. rcs_createworkdir: procedure expose CONFIG.
  588.  
  589.     parse arg USER
  590.  
  591.     'REQUEST BODY="Please choose your working directory.*nEach member of your workgroup should*nhave a private working directory for*nthis project (on your local machine)." BUTTON="!OK"'
  592.  
  593.     if (RC = 0) then do
  594.  
  595.         do forever
  596.  
  597.             'REQUEST DIR SAVE TITLE="Working directory..." PATH="sys:" VAR=PRJWORK'
  598.  
  599.             if (RC = 0) then do
  600.  
  601.                 'EXPAND NAME="' || PRJWORK || '" VAR=PRJWORK'
  602.  
  603.                 CONFIG.CFG_WORK.USER = PRJWORK
  604.  
  605.                 if (exists(PRJWORK || "rcs_link") = 0) then do
  606.  
  607.                     if (exists(PRJWORK || "rcs_root") = 0) then do
  608.  
  609.                         call rcs_savelink USER
  610.  
  611.                         leave
  612.                     end
  613.                     else
  614.                         'REQUEST PROBLEM="This directory is already used as*nworking directory by another user*nor for another project and can not*nbe selected again."'
  615.                 end
  616.                 else
  617.                     leave
  618.             end
  619.             else
  620.                 call rcs_exit
  621.         end
  622.     end
  623.  
  624.     return
  625.  
  626. /* /// */
  627. /* /// "rcs_savelink" */
  628.  
  629. rcs_savelink: procedure expose CONFIG.
  630.  
  631.     parse arg USER
  632.  
  633.     if (USER ~= 0) then do
  634.  
  635.         PATH = CONFIG.CFG_WORK.USER || 'RCS_root'
  636.  
  637.         R = open('CONFIG', PATH, 'WRITE')
  638.  
  639.         if (R = 0) then
  640.  
  641.             'REQUEST PROBLEM="Failed to save local configuration."'
  642.  
  643.         else do
  644.  
  645.             R = writeln('CONFIG', "[CONFIG]")
  646.  
  647.             R = writeln('CONFIG', CONFIG.CFG_PATH)
  648.  
  649.             R = close('CONFIG')
  650.         end
  651.     end
  652.  
  653.     return
  654.  
  655. /* /// */
  656. /* /// "rcs_readlink" */
  657.  
  658. rcs_readlink: procedure expose CONFIG.
  659.  
  660.     parse arg PATH
  661.  
  662.     R = open('CONFIG', PATH || "RCS_root", 'READ')
  663.  
  664.     if (R = 0) then do
  665.  
  666.         'REQUEST PROBLEM="Couldn''t read configuration file"'
  667.  
  668.         call rcs_exit
  669.     end
  670.     else do forever
  671.  
  672.         DATA = readln('CONFIG')
  673.  
  674.         if (eof('CONFIG')) then do
  675.  
  676.             R = close('CONFIG')
  677.  
  678.             leave
  679.         end
  680.  
  681.         if (eof('CONFIG')) then
  682.  
  683.             leave
  684.  
  685.         if (left(DATA, 8) = "[CONFIG]") then
  686.  
  687.             PATH = readln('CONFIG')
  688.     end
  689.  
  690.     return PATH
  691.  
  692. /* /// */
  693.